/*
 * NumberUtils.java
 *
 *  created: 18.2.2011
 *  charset: UTF-8
 *  license: MIT (X11) (See LICENSE file for full license)
 */

package cz.mp.util;

import java.util.Formatter;
import java.util.Locale;


/**
 *
 * @author Martin Pokorný
 * @version 0.1
 */
public class NumberUtils {

    private NumberUtils() {
    }

    /**
     * Viz tip 
     * <a href="http://www.rgagnon.com/javadetails/java-0026.html">
     * Real's HowTo</a>
     *
     * @param b
     * @return
     *
     */
    public static int unsignedByteToInt(byte b) {
        return (int) b & 0xFF;
    }

    /** 
     * Z typu <tt>int</tt> vezme dva nejméně významné bajty a udělá z nich pole.
     * Pořadí bajtů je Little-endian.
     * <p>
     * např:
     * <tt><pre> 
     * 258 (00000001 00000010) ---> a[0] = 2 (00000010), a[1] = 1 (00000001) 
     * </pre></tt>   
     * 
     * @param value hodnota typu int
     * @return pole dvou bajtů
     */
    private static byte[] intToTwoByteArray(int value) {
        return new byte[] {
                    (byte)(value),
                    (byte)(value >>> 8)};
    }

    /**
     * Formátuje číslo na zadaný počet desetinných míst.
     * Formátováno podle {@code Locale.ENGLISH}.  
     * <p>
     * např:
     * <tt><pre>
     * 123.669000 --(decimals=2)--> 123.67
     * </pre></tt>
     * 
     * @param number
     * @param decimals
     * @return 
     */
    public static String convertToString(double number, int decimals) {
        return convertToString(number, decimals, Locale.ENGLISH);
    }
        
    /**
     * Formátuje číslo na zadaný počet desetinných míst v dané lokalizaci.
     * 
     * @param number
     * @param decimals
     * @return 
     */
    public static String convertToString(double number, int decimals, 
            Locale locale) {
        StringBuilder sb = new StringBuilder();
        Formatter formatter = new Formatter(sb, locale);
        formatter.format("%." + decimals + "f", number);
        return sb.toString();
    } 
    
}   